import request from '../../../untils/request'
import PubSub from 'pubsub-js'
import moment from 'moment'
//获取全局变量
const appInstance = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isPlay: false, //音乐是否播放
    song: {}, //歌曲详情对象
    musicId: '', //音乐id
    musicLink: '', //音乐链接
    durationTime: '00.00', //总时长
    currentTime: '00.00' ,//实时时间
    currentWidth:0//实时进度条的宽度


  },
  handleMusicPlay() {
    let isPlay = !this.data.isPlay
    // this.setData({
    //   isPlay: isPlay
    // })
    let {
      musicId,
      musicLink
    } = this.data
    this.musicControl(isPlay, musicId, musicLink)
  },

  //控制音乐播放方法
  async musicControl(isPlay, musicId, musicLink) {
    //创建控制音乐播放的实例
    // let backgroundAudioManager = wx.getBackgroundAudioManager();
    if (isPlay) {
      //音乐播放
      if (!musicLink) {
        //获取音乐播放链接通过音乐id
        let musicLinkData = await request('/song/url', {
          id: musicId
        })
        musicLink = musicLinkData.data[0].url
        this.setData({
          musicLink
        })
      }
      this.backgroundAudioManager.src = musicLink;
      this.backgroundAudioManager.title = this.data.song.name

    } else {
      //音乐暂停
      this.backgroundAudioManager.pause()
    }
  },
  //通过id获取歌曲信息
  async getMusicInfo(musicId) {
    let songData = await request('/song/detail', {
      ids: musicId
    })
    let durationTime = moment(songData.songs[0].dt).format('mm:ss')
    this.setData({
      song: songData.songs[0],
      durationTime
    })

    wx.setNavigationBarTitle({
      title: this.data.song.name,
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // console.log(options.musicId)
    let musicId = options.musicId;
    this.setData({
      musicId
    })
    //获取音乐详情
    this.getMusicInfo(musicId)
    this.setData({
      id: musicId
    })
    //判断当前页面音乐是否在播放
    if (appInstance.globaData.isMusicPlay && appInstance.globaData.musicId === musicId) {
      this.setData({
        isPlay: true
      })
    }
    // 创建控制音乐播放的实例
    this.backgroundAudioManager = wx.getBackgroundAudioManager();
    //如果用户操作系统播放时页面不知道，解决方案通过控制音频实例去监视音乐的播放和暂停
    this.backgroundAudioManager.onPlay(() => {
      this.changePlayState(true)

      //修改全局变量音乐播放状态

      appInstance.globaData.musicId = musicId
    });
    this.backgroundAudioManager.onPause(() => {
      this.changePlayState(false)
    })

    this.backgroundAudioManager.onStop(() => {
      //修改背景音频停止事件
      this.changePlayState(false)
    })


    //监听音乐实时播放速度
    this.backgroundAudioManager.onTimeUpdate(() => {
      //格式化时间长度
      let currentTime = moment(this.backgroundAudioManager.currentTime * 1000).format('mm:ss')
      let currentWidth=this.backgroundAudioManager.currentTime/this.backgroundAudioManager.duration * 450;
      this.setData({
        currentTime,
        currentWidth
      })
    })

    //监听音乐播放自然结束
    this.backgroundAudioManager.onEnded(()=>{
      //自动切换至下一首音乐并且自动播放
     PubSub.publish('switchType','next')
      //将实时进度条长度还原为0
      this.setData({
        currentWidth:0,
        currentTime:'00.00'
      })
    })
  },

  //修改播放状态函数
  changePlayState(isPlay) {
    this.setData({
      isPlay
    })

    appInstance.globaData.isMusicPlay = isPlay
  },
  //点击切换歌曲操作
  handleSwitch(event) {
    let type = event.currentTarget.id

    this.backgroundAudioManager.stop()
    console.log(type)
    //订阅musicId页面id
    PubSub.subscribe('musicId', (msg, musicId) => {
      console.log(musicId)

      //获取音乐信息
      this.getMusicInfo(musicId)
      //控制音乐播放暂停
      this.musicControl(true, musicId)
      //取消订阅
      PubSub.unsubscribe('musicId')
    })
    //发布消息数据给recommendSong页面
    PubSub.publish('switchType', type)
  },


  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})